/#include <iostream>
//#include <functional>
//using namespace std;
//
////ret = func(x);
//
////template<class F, class T>
////T useF(F f, T x)
////{
////	static int count = 0;
////	cout << "count:" << ++count << endl;
////	cout << "count:" << &count << endl;
////
////	return f(x);
////}
////
////double f(double i)
////{
////	return i / 2;
////}
////
////struct Functor
////{
////	double operator()(double d)
////	{
////		return d / 3;
////	}
////};
//
////int main()
////{
////	// 
////	cout << useF(f, 11.11) << endl;
////
////	// 
////	cout << useF(Functor(), 11.11) << endl;
////
////	// lamberʽ
////	cout << useF([](double d)->double{ return d / 4; }, 11.11) << endl;
////
////	return 0;
////}
//
//int f(int a, int b)
//{
//	return a + b;
//}
//
//struct Functor
//{
//public:
//	int operator() (int a, int b)
//	{
//		return a + b;
//	}
//};
//
//class Plus
//{
//public:
//	static int plusi(int a, int b)
//	{
//		return a + b;
//	}
//
//	double plusd(double a, double b)
//	{
//		return a + b;
//	}
//};
//
//int main()
//{
//	function<int(int, int)> f1;
//	f1 = f;
//	function<int(int, int)> f2(f);
//
//	cout << f1(1, 2) << endl;
//	cout << f2(1, 2) << endl;
//
//	f1 = Functor();
//	//Functor ft;
//	//function<int(int, int)> f3(ft);
//	function<int(int, int)> f3(Functor());
//
//	//function<int(int, int)> f3 = Functor();
//	cout << f1(1, 2) << endl;
//	cout << f3(1, 2) << endl;
//
//	return 0;
//}